#include <iostream>
#include <math.h>
#include <map>
#include <vector>
#include <algorithm>
/*
    田忌赛马。贪心，
    1. 首先对各自的马排序，找到上，中，下等马
    2. 然后依次用田忌的马跟齐威王的所有马进行比较，找到能赢，而且代价最小的匹配情况
    3. 注意，这里可以通过判断齐威王最慢的下等马是否比田忌当前的马慢来判断是否还有更优解

    贪心策略优先级：
    1. 优先保证能赢，而且是差距最小，代价最小的赢
    2. 然后是相等，平局
    3. 最后才是输
    相当于进行了两次贪心，第一次贪赢，第二次贪赢的时候代价最小
*/
using namespace std;
int compare(int tianji, vector<int> &qiweiwang)
{
    int amount = 0;
    int n = qiweiwang.size();
    for (size_t i = n - 1; i >= 0; i--)
    {
        if (tianji > qiweiwang[i])
        {
            amount += 1;
            qiweiwang.erase(qiweiwang.begin() + i);
            return amount;
        }
        else if (tianji == qiweiwang[i] && qiweiwang[0] < tianji) // 如果找到相等的了，但是还存在比田忌马更慢的马，那么就继续走下去
        {
            continue;
        }
        else if (tianji < qiweiwang[i] && qiweiwang[0] < tianji) // 如果当前比不过的了，但是还存在比田忌马更慢的马，那么就继续走下去
        {
            continue;
        }
        else if (tianji == qiweiwang[i] && qiweiwang[0] >= tianji) // 如果找到相等的了，但是不存在比田忌马更慢的马，那么就返回
        {
            qiweiwang.erase(qiweiwang.begin() + i);
            return amount;
        }
        else if (tianji < qiweiwang[i] && qiweiwang[0] >= tianji) // 如果当前比不过的了，但是不存在比田忌马更慢的马，那么就返回
        {
            amount -= 1;
            qiweiwang.erase(qiweiwang.begin() + i);
            return amount;
        }
    }
}

void test()
{
    int n, temp, res = 0;
    vector<int> QiWeiWang;
    vector<int> TianJi;
    cin >> n;
    for (size_t i = 0; i < n; i++)
    {
        cin >> temp;
        QiWeiWang.push_back(temp);
    }
    for (size_t i = 0; i < n; i++)
    {
        cin >> temp;
        TianJi.push_back(temp);
    }
    sort(QiWeiWang.begin(), QiWeiWang.end());
    sort(TianJi.begin(), TianJi.end());
    for (int i = TianJi.size() - 1; i >= 0; i--)
    {
        res += compare(TianJi[i], QiWeiWang);
        cout << res << endl;
    }

    cout << res;
}

int main()
{
    test();
    return 0;
}